const db=require('../mysql/index')  //导入数据库配置模块
const bcrypt=require('bcryptjs')  //导入密码加密模块
const jwt = require('jsonwebtoken') //导入jwt模块


// ==============登录的处理函数
exports.login = (req, res) => {
    const userinfo = req.body
    //校验
    if (!userinfo.studentId || !userinfo.password) {
        return res.sendError('用户名或密码不能为空！' )
    }

    // //这一步先判断否是默认密码的用户，是的话直接对比密码，否则进行加密比对
    // const sql1='select * from users where studentId=?'

//判断是否是超级管理员，是的话去root表查询，不是的话去用户表查询
    if (userinfo.studentId === 'admin'){
        //在数据库中查询是否有这个用户
        const sql = `select * from root where username=?`
        db.query(sql,userinfo.studentId,function (err,results){

            // 执行 SQL 语句失败
            if (err) return res.sendError(err)
            // 执行 SQL 语句成功，但是查询到数据条数不等于 1
            if (results.length !== 1) return res.sendError('找不到该用户，登录失败！')


            //密码比对
            const compareResult = bcrypt.compareSync(userinfo.password, results[0].password)

            // 如果对比的结果等于 false, 则证明用户输入的密码错误
            if (!compareResult) {
                return res.sendError('用户名或者密码错误，登录失败!')
            }
            // TODO：登录成功，生成 Token 字符串


            const user = { ...results[0], password: '' } // 剔除完毕之后，user 中只保留了{ id: 1, username: 'admin', password: '', status: 0 }

            const config = require('../config') //导入jwt配置文件
            // 生成 Token 字符串
            const tokenStr = jwt.sign(user, config.jwtSecretKey,{expiresIn:config.expiresIn})
            res.send({
                status: 0,
                message: '登录成功！',
                // 为了方便客户端使用 Token，在服务器端直接拼接上 Bearer 的前缀
                data: 'Bearer ' + tokenStr,
            })

        })
    }
    //如果用户不是root
    else {
        const sql1='select * from users where studentId=?'
        db.query(sql1,userinfo.studentId,function (err,results1){

            // 执行 SQL 语句失败
            if (err) return res.sendError(err)
            // 执行 SQL 语句成功，但是查询到数据条数不等于 1
            if (results1.length !== 1) return res.sendError('找不到该用户，登录失败！')
            if (results1[0].ischangpassword ===0 && results1[0].password ===userinfo.password){
                const user1 = { ...results1[0], password: '' }

                const config = require('../config') //导入jwt配置文件
                // 生成 Token 字符串
                const tokenStr = jwt.sign(user1, config.jwtSecretKey,{expiresIn:config.expiresIn})
                res.send({
                    status: 0,
                    message: '登录成功！',
                    // 为了方便客户端使用 Token，在服务器端直接拼接上 Bearer 的前缀
                    data: 'Bearer ' + tokenStr,
                })

            }
            //如果已经修改过密码
            else{
                        //密码比对
            const compareResult = bcrypt.compareSync(userinfo.password, results1[0].password)

            // 如果对比的结果等于 false, 则证明用户输入的密码错误
            if (!compareResult) {
                return res.sendError('用户名或者密码错误，登录失败!')
            } 
             const user2 = { ...results1[0], password: '' }
            
            const config2 = require('../config') //导入jwt配置文件
            // 生成 Token 字符串
            const tokenStr2 = jwt.sign(user2, config2.jwtSecretKey,{expiresIn:config2.expiresIn})
            res.send({
                status: 0,
                message: '登录成功！',
                // 为了方便客户端使用 Token，在服务器端直接拼接上 Bearer 的前缀
                data: 'Bearer ' + tokenStr2,
            })
                
                
            }


        })




    }


}

//=============登录上的用户的信息
exports.getloginUser=(req,res)=>{

    // console.log(req)
    const userid=req.user.userId
    const userInfo=req.user

// const sql1='select distinct right_id from users_roles,roles_rights where users_roles.users_id=? and users_roles.roles_id =roles_rights.role_id '
// const sql2='select code from rights where id =?'
const sql1='select distinct codes from users_roles,roles_rights, rights where users_roles.users_id=? and users_roles.roles_id =roles_rights.role_id and roles_rights.right_id=rights.id'



const sq2='select codes from root where userId=?'

//判断是否是root用户
if(userInfo.username ==='admin'){
    
  db.query(sq2,userid,(err,result2)=>{
      if(err) return res.sendError(err)
      const menu=[]
      menu.push(...result2[0].codes.split(','))
 res.send({status:0,message:'获取用户信息成功',data:{userInfo,menu}})
     
  })  
    
}
//如果不是root用户
else{
  
    db.query(sql1,userid,(err,result1)=>{
    if(err) return res.sendError(err)
    // if(result.length ==-1) res.sendError('未知错误')
    // if(result1.length === -1) return res.sendError('找不到该标识')
 
    const menu=[]
    result1.forEach(item=>{
     menu.push(item.codes )   
        
    })
    
    
   res.send({status:0,message:'获取用户信息成功',data:{userInfo,menu}})
      
   
     
    
})
}



    
}